/**
 * @description 控制器
 * @since 2019-11-12
 * @author Rid King
*/

const ox = require('@daelui/oxjs')
const Service = require('./service.js')

class Controller extends ox.Controller {
  /**
   * @function 构造方法
  */
  constructor (args) {
    super(args)
    // 服务
    this.$service = new Service(args)
  }

  // token验证
  valid (action) {
    // 解析数据
    return this.solveAction(action).then(async action => {
      let params = action.params || {}
      // GET请求携带参数是个参数signature,timestamp,nonce,echostr
      const { signature, timestamp, nonce, echostr} = params

      // 服务器的token
      const token = 'TOKEN'

      // 将token、timestamp、nonce三个参数进行字典序排序 
      const arrSort = [token, timestamp, nonce]
      arrSort.sort()

      // 将三个参数字符串拼接成一个字符串进行sha1加密,npm install --save sha1
      const str = arrSort.join('')
      const shaStr = sha1(str)

      // 获得加密后的字符串可与signature对比，验证标识该请求来源于微信服务器
      if (shaStr === signature) {
        // 确认此次GET请求来自微信服务器，请原样返回echostr参数内容，则接入生效
        return {
          type: 'PLAINTEXT',
          data: echostr
        }
        // res.send(echostr)
      } else {
        //否则接入失败。
        return {
          type: 'PLAINTEXT',
          data: 'No'
        }
        // res.send("no")
      }
    })
  }
}

module.exports = Controller